﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using ComunesMGI.DataTypes;
using System.Xml;
using ComunesMGI.Enum;
using System.Configuration;

namespace MGI.AccesoDatos
{
    class DAOIncidentes: IDatosIncidentes
    {
        /// <summary>
        /// PRECONDICION: Existe el cliente y el sistema especificado.
        /// </summary>
        /// <param name="cliente"></param>
        /// <param name="sistema"></param>
        /// <param name="lista"></param>
        /// <returns></returns>
        public List<DataCampo> getCampos(DataCliente cliente, DataSistema sistema, Lista tipoLista)
        {
            //string pathClientesInfo = "C:\\Documents and Settings\\Administrator\\My Documents" + "\\MGI REPOSITORIO\\Proyecto\\Implementacion\\Desarrollo\\INFOCLIENTES";
            string pathClientesInfo = ConfigurationManager.AppSettings.Get("pathInfoClientes");
            DirectoryInfo dirInfo = new DirectoryInfo(pathClientesInfo);

            string pathInfoSitema = pathClientesInfo + "\\" + cliente.Nombre + "\\" + sistema.Nombre + ".xml";
            
            //Lista con los nombre de los campos a retornar
            List<DataCampo> campos = new List<DataCampo>();

            XmlDocument xDoc = new XmlDocument();
            xDoc.Load(pathInfoSitema);
            XmlNodeList listaNodoSistema = xDoc.GetElementsByTagName("sistema");
            XmlNodeList listaNodoListas = ((XmlElement)listaNodoSistema[0]).GetElementsByTagName("listas");
            
            string lista = "";
            switch (tipoLista)
            {
                case Lista.Incidentes:
                    lista = "incidentes";
                    break;
                case Lista.Tareas:
                    lista = "tareas";
                    break;
                default:
                    break;
            }

            XmlNodeList listaNodoLista = ((XmlElement)listaNodoListas[0]).GetElementsByTagName(lista);
            XmlNodeList listaNodoCampo = ((XmlElement)listaNodoLista[0]).GetElementsByTagName("campo");
            foreach (XmlElement nodoCampo in listaNodoCampo) 
            { 
                XmlNodeList listaNombreCampo = nodoCampo.GetElementsByTagName("nombre");
                string nomCampo=((XmlElement)listaNombreCampo[0]).InnerText;

                XmlNodeList listaParteMail = nodoCampo.GetElementsByTagName("parteMail");
                string textoParteMail = ((XmlElement)listaParteMail[0]).InnerText;
                ParteMail parteMail;

                switch (textoParteMail)
                {
                    case "BODY":
                        parteMail = ParteMail.BODY;
                        break;
                    case "DATE":
                        parteMail = ParteMail.DATE;
                        break;
                    case "FROM":
                        parteMail = ParteMail.FROM;
                        break;
                    case "SUBJECT":
                        parteMail = ParteMail.SUBJECT;
                        break;
                    default:
                        parteMail = ParteMail.NINGUNO;
                        break;
                }
 

                
                DataCampo dataCampo = new DataCampo(nomCampo, parteMail);
                campos.Add( dataCampo);
            }
            return campos;
        }
    }
 }
 